package com.ddiviewer;

//=============================================================================
// Imports
//=============================================================================
import java.util.regex.Pattern;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.util.Log;


//=============================================================================
// DDIXMLHandler - XML Handler
//  Extended Handler for XML SAX Data
//=============================================================================
public class DDIXMLHandler extends DefaultHandler {

	
	//=========================================================================
	// Variables for use in SAX Parser
	//=========================================================================
	protected boolean		buffering		= false;
	protected StringBuffer	buff 			= null;
	protected Item			item			= null;
	
	
	//=========================================================================
	// startDocument() - Override
	//=========================================================================
	@Override public void startDocument() throws SAXException { }
	
	
	//=========================================================================
	// endDocument() - Override
	//=========================================================================
	@Override public void endDocument() throws SAXException {	}
	
	
	//=========================================================================
	// startElement() - Override
	//=========================================================================
	@Override
	public void startElement(String uri, String name, String qname, Attributes atts) throws SAXException {
		// If we see a new ID or Name, we need to create a new buffer in which to put it
		if (name.trim().equals("ID") || name.trim().equals("Name") || name.trim().equals("Level") ||
			name.trim().equals("EnhancementValue") || name.trim().equals("Category") || name.trim().equals("GroupRole") || 
			name.trim().equals("CombatRole") || name.trim().equals("Prerequisite") || name.trim().equals("TierName") ||
			name.trim().equals("DescriptionAttribute")) {
			buffering = true;
			buff = new StringBuffer();
			Log.d("XML", "new element");
		}
		
		// If we see a new main section, we need to instantiate a new Item object
		if (name.trim().equals("Trap")        || name.trim().equals("Deity")       ||
			name.trim().equals("Glossary")    || name.trim().equals("Monster")     ||
			name.trim().equals("Skill")       || name.trim().equals("Ritual")      ||
			name.trim().equals("Race")        || name.trim().equals("Power")       ||
			name.trim().equals("ParagonPath") || name.trim().equals("Item")        ||
			name.trim().equals("Feat")        || name.trim().equals("EpicDestiny") ||
			name.trim().equals("Class")) {
			item = new Item();
		}
	}


	//=========================================================================
	// endElement() - Override
	//=========================================================================
	@Override
	public void endElement(String uri, String name, String qname) throws SAXException {
		
		if (name.trim().equals("Trap")) {
			item.setTab(new String("Trap"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("Deity"))	{
			item.setTab(new String("Deity"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("Glossary")) {
			item.setTab(new String("Glossary"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("Monster")) {
			item.setTab(new String("Monster"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("Skill"))	{
			item.setTab(new String("Skill"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("Ritual")) {
			item.setTab(new String("Ritual"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("Race")) {
			item.setTab(new String("Race"));
			item.toString();
			SearchTab.item.add(item);
			//SearchTab.race.add(item);
		} else if (name.trim().equals("Power"))	{
			item.setTab(new String("Power"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("ParagonPath")) {
			item.setTab(new String("ParagonPath"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("Item")) {
			item.setTab(new String("Item"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("Feat")) {
			item.setTab(new String("Feat"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("EpicDestiny")) {
			item.setTab(new String("EpicDestiny"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("Class"))	{
			item.setTab(new String("Class"));
			item.toString();
			SearchTab.item.add(item);
		} else if (name.trim().equals("ID")) {
			buffering = false;
			if (Pattern.matches("\\S*", buff.toString())) {
				item.setID(new String(buff.toString()));
			} else {
				item.setID(null);
			}
		} else if (name.trim().equals("Level")) {
			buffering = false;
			if (Pattern.matches("\\S*", buff.toString())) {
				item.setLevel(new String(buff.toString()));
			} else {
				item.setLevel(null);
			}
		} else if (name.trim().equals("Name")){
			buffering = false;
			item.setName(new String(buff.toString()));
		} else if (name.trim().equals("Category")) {
			buffering = false;
			if (Pattern.matches("\\S*", buff.toString())) {
				item.setCategory(new String(buff.toString()));
			} else {
				item.setCategory(null);
			}
		} else if (name.trim().equals("EnhancementValue")) {
			buffering = false;
			if (Pattern.matches("\\S*", buff.toString())) {
				item.setEnhancementValue(new String(buff.toString()));
			} else {
				item.setEnhancementValue(null);
			}	
		} else if (name.trim().equals("GroupRole")) {
			buffering = false;
			if (Pattern.matches("[\\S\\s]*", buff.toString())) {
				item.setGroupRole(new String(buff.toString()));
			} else {
				item.setGroupRole(null);
			}
		} else if (name.trim().equals("CombatRole")) {
			buffering = false;
			if (Pattern.matches("[\\S\\s]*", buff.toString())) {
				item.setCombatRole(new String(buff.toString()));
			} else {
				item.setCombatRole(null);
			}	
		} else if (name.trim().equals("Prerequisite")) {
			buffering = false;
			if (Pattern.matches("[\\S\\s]*", buff.toString())) {
				item.setPrerequisite(new String(buff.toString()));
			} else {
				item.setPrerequisite(null);
			}	
		} else if (name.trim().equals("TierName")) {
			buffering = false;
			if (Pattern.matches("[\\S\\s]*", buff.toString())) {
				item.setTierName(new String(buff.toString()));
			} else {
				item.setTierName(null);
			}	
		} else if (name.trim().equals("DescriptionAttribute")) {
			buffering = false;
			if (Pattern.matches("[\\S\\s]*", buff.toString())) {
				item.setDescriptionAttribute(new String(buff.toString()));
			} else {
				item.setDescriptionAttribute(null);
			}	
		}
	}


	//=========================================================================
	// characters() - update characters
	//=========================================================================
	@Override
	public void characters (char ch[], int start, int length) {
		if (buffering) 
			buff.append(ch, start, length);
	}

}
